// MemberAdapter.java
package com.xxxy.ljh.myapplication.Adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.xxxy.ljh.myapplication.R;
import com.xxxy.ljh.myapplication.model.User;
import java.util.List;

/**
 * 成员列表适配器类，用于在 RecyclerView 中展示用户成员信息。
 * 支持显示成员名称、角色和状态，并提供审核操作按钮（批准/拒绝）。
 */
public class MemberAdapter extends RecyclerView.Adapter<MemberAdapter.MemberViewHolder> {
    private List<User> memberList;

    /**
     * 构造方法，初始化成员列表数据。
     *
     * @param memberList 用户成员列表数据源
     */
    public MemberAdapter(List<User> memberList) {
        this.memberList = memberList;
    }

    /**
     * 创建 ViewHolder 实例，加载 item_member 布局。
     *
     * @param parent   父容器视图组
     * @param viewType 视图类型（本例中未使用）
     * @return 返回新创建的 MemberViewHolder 实例
     */
    @NonNull
    @Override
    public MemberViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_member, parent, false);
        return new MemberViewHolder(view);
    }

    /**
     * 绑定数据到指定位置的 ViewHolder。
     *
     * @param holder   ViewHolder 实例
     * @param position 数据项的位置索引
     */
    @Override
    public void onBindViewHolder(@NonNull MemberViewHolder holder, int position) {
        User member = memberList.get(position);
        holder.bind(member);
    }

    /**
     * 获取数据集合中的元素数量。
     *
     * @return 成员列表大小，若为空则返回 0
     */
    @Override
    public int getItemCount() {
        return memberList != null ? memberList.size() : 0;
    }

    /**
     * 更新成员列表并刷新界面。
     *
     * @param newList 新的成员列表数据
     */
    public void updateMemberList(List<User> newList) {
        this.memberList = newList;
        notifyDataSetChanged();
    }

    /**
     * ViewHolder 内部类，持有成员条目布局中的各个控件引用，
     * 并负责将数据绑定到 UI 元素上。
     */
    public static class MemberViewHolder extends RecyclerView.ViewHolder {
        private TextView tvMemberName, tvMemberRole, tvMemberStatus;
        private Button btnApprove, btnReject;

        /**
         * 构造方法，初始化成员条目布局中的控件引用。
         *
         * @param itemView 条目对应的根视图
         */
        public MemberViewHolder(@NonNull View itemView) {
            super(itemView);
            tvMemberName = itemView.findViewById(R.id.tvMemberName);
            tvMemberRole = itemView.findViewById(R.id.tvMemberRole);
            tvMemberStatus = itemView.findViewById(R.id.tvMemberStatus);
            btnApprove = itemView.findViewById(R.id.btnApprove);
            btnReject = itemView.findViewById(R.id.btnReject);
        }

        /**
         * 将用户对象的数据绑定到当前 ViewHolder 的 UI 控件上。
         *
         * @param member 要绑定的用户对象
         */
        public void bind(User member) {
            tvMemberName.setText(member.getUsername());

            // 根据角色编号设置对应的角色文本描述
            String roleText;
            switch (member.getRole()) {
                case 0:
                    roleText = "普通成员";
                    break;
                case 1:
                    roleText = "管理员";
                    break;
                case 2:
                    roleText = "创建者";
                    break;
                default:
                    roleText = "未知";
            }
            tvMemberRole.setText("角色: " + roleText);

            // 根据状态编号设置对应的状态文本及按钮可见性
            String statusText;
            switch (member.getStatus()) {
                case 0:
                    statusText = "待审核";
                    // 显示审核按钮
                    btnApprove.setVisibility(View.VISIBLE);
                    btnReject.setVisibility(View.VISIBLE);
                    break;
                case 1:
                    statusText = "已通过";
                    // 隐藏审核按钮
                    btnApprove.setVisibility(View.GONE);
                    btnReject.setVisibility(View.GONE);
                    break;
                case 2:
                    statusText = "已拒绝";
                    // 隐藏审核按钮
                    btnApprove.setVisibility(View.GONE);
                    btnReject.setVisibility(View.GONE);
                    break;
                default:
                    statusText = "未知状态";
                    btnApprove.setVisibility(View.GONE);
                    btnReject.setVisibility(View.GONE);
            }
            tvMemberStatus.setText("状态: " + statusText);

            // 设置批准按钮点击事件
            btnApprove.setOnClickListener(v -> {
                // 处理批准操作
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    // 可以在这里添加批准逻辑
                }
            });

            // 设置拒绝按钮点击事件
            btnReject.setOnClickListener(v -> {
                // 处理拒绝操作
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    // 可以在这里添加拒绝逻辑
                }
            });
        }
    }
}
